/*
 * Copyright 2011 Michael Nitsche
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.mnit.schnipsel.swt.dialog;

import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.mnit.basis.daten.WandleObjekt;
import de.mnit.basis.daten.konstant.position.POSITION_H;
import de.mnit.basis.daten.konstant.position.POSITION_V;
import de.mnit.basis.daten.struktur.tabelle.S_Tabelle;
import de.mnit.basis.fehler.system.F_Sys_InOut;
import de.mnit.basis.swt.anw.A_MN_Dialog;
import de.mnit.basis.swt.anw.A_MN_Gruppe;
import de.mnit.basis.swt.dialog.SWT_Dialog;
import de.mnit.basis.swt.element.S_SWT_Komponente;
import de.mnit.basis.swt.element.steuer.SWT_Knopf;
import de.mnit.basis.swt.element.steuer.SWT_Label;
import de.mnit.basis.swt.element.steuer.rollbar.SWT_TextEingabe;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.SWT_Fenster;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.bild.deko.S_Fenster;
import de.mnit.basis.swt.element.steuer.rollbar.gruppe.tabelle.SWT_TabelleVirtuell;
import de.mnit.basis.swt.grafik.icon.direkt.ICON;
import de.mnit.basis.swt.layout.Ebene;
import de.mnit.basis.swt.layout.LayoutGitter;
import de.mnit.basis.swt.layout.LayoutLeer;
import de.mnit.basis.swt.spezial.suche.K_Suche;
import de.mnit.basis.sys.Ausgabe;
import de.mnit.basis.sys.event.S_Zuhoerer;
import de.mnit.basis.sys.sprache.S;
import de.mnit.schnipsel.db.DBManager;
import de.mnit.schnipsel.swt.editor.basis.LINKART;
import de.mnit.schnipsel.swt.editor.basis.LinkInfo;

/**
 * @author Michael Nitsche
 * 05.07.2010	Erstellt
 */
public class K_ArtikelLink extends A_MN_Dialog<K_ArtikelLink,LinkInfo> implements S_LinkDialog {

	public static void main(String[] args)   { start(K_ArtikelLink.class); }


	private static final S s=new S(K_ArtikelLink.class);
	private final SWT_TextEingabe		k_titel		= new SWT_TextEingabe();
	private final K_Suche				k_suche		= new K_Suche();
	private final SWT_Label				k_text_titel= new SWT_Label();
	private final SWT_TabelleVirtuell 	k_tab		= new SWT_TabelleVirtuell();
	private final SWT_Knopf				k_ok		= new SWT_Knopf();
	private final SWT_Knopf				k_abbruch	= new SWT_Knopf();
	private String  erg_titel=null;
	private Integer erg_id=null;
	private String  erg_idname=null;
	private LinkInfo puffer=null;


	public void setze(LinkInfo info) {
		if(!this.erzeugt()) {
			this.puffer=info;
			return;
		}

		this.k_titel.sText(info.titel);
		String id=WandleObjekt.zuString(info.daten);
		if(id!=null) {
			S_Tabelle<?> tab=t.k_tab.gInhalt();
			for(int i=0; i<tab.gLaenge(); i++)
				if(id.equals(tab.gib(2, i+1))) {
					t.k_tab.swt().setSelection(i);
					break;
				}
		}
	}

	// ERSTELLEN

	protected LinkInfo gErgebnis2() {
		if(this.erg_titel==null || this.erg_titel.length()==0 || this.erg_id==null)
			return null;
		return new LinkInfo(this.erg_titel, LINKART.ID, this.erg_id);
	}

	protected S_SWT_Komponente<?, ? extends Composite> layout() {
		LayoutGitter titel=LayoutGitter.neu()
			.sSpaltenAnzahl(2)
			.sAussenabstand(5)
			.sZwischenraumV(5)
			.sKomponente(t.k_text_titel)
				.sBreite(40)
				.sPositionV(POSITION_V.MITTE)
				.fertig()
			.sKomponente(t.k_titel)
				.sFlexibelH()
				.fertig();

		LayoutGitter artikel = LayoutGitter.neu()
			.sZwischenraumV(5)
			.sAussenabstand(5)
			.sKomponente(t.k_suche)
				.sFlexibelH()
				.fertig()
			.sKomponente(t.k_tab)
				.sFlexibel()
				.fertig();

		LayoutGitter knoepfe=LayoutGitter.neu()
			.sSpaltenAnzahl(3)
			.sAussenabstand(5)
			.sKomponente(t.k_abbruch)
				.sBreite(100)
				.sPositionH(POSITION_H.LINKS)
				.fertig()
			.sKomponente(LayoutLeer.neu())
				.sFlexibelH()
				.fertig()
			.sKomponente(t.k_ok)
				.sBreite(100)
				.sPositionH(POSITION_H.RECHTS)
				.fertig();

		return LayoutGitter.neu()
			.sZwischenraumV(5)
			.sKomponente(titel)
				.sFlexibelH()
				.fertig()
			.sKomponente(Ebene.neu(artikel))
				.sFlexibel()
				.fertig()
			.sKomponente(knoepfe)
				.sFlexibelH()
				.fertig();
	}

	protected void initStyle() {
		t.k_text_titel.sText(s.t("Titel:"));

		t.k_ok.sText(s.t("Ok"));
		t.k_abbruch.sText(s.t("Abbruch"));

		t.k_ok.sBild(ICON._16.AKTION_OK);
		t.k_abbruch.sBild(ICON._16.AKTION_ABBRUCH);

		t.k_tab.sLetzteSpalteAuto(50);
		t.k_tab.nTabellenSpalte("Titel");

		t.k_titel.sFokus();
	}

	protected void initEvents() {
		t.k_abbruch.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				t.schliessen();
			}
		});

		t.k_ok.eAuswahl(new Listener() {
			public void handleEvent(Event event) {
				iAuswahl(true);
			}
		});

		t.k_suche.eSuche(new S_Zuhoerer<String>() {
			public void verarbeite(String suche) {
				iSuche(suche);
			}
		});

		t.k_tab.eAuswahl(new Listener() {
			public void handleEvent(Event e) {
				Ausgabe.debug("Auswahl");
				iAuswahl(false);
			}
		});

		t.k_tab.eMausDoppelKlick(new Listener() {
			public void handleEvent(Event e) {
				Ausgabe.debug("Doppelklick");
				iAuswahl(true);
			}
		});

		iSuche("");

		if(this.puffer!=null)
			this.setze(this.puffer);
	}

	protected S_Fenster<?> fenster(A_MN_Gruppe instanz) throws F_Sys_InOut {
		return SWT_Fenster.neu(instanz, false, 300, 300, "Artikel-Link", ICON._16.OBJ_ERDE, ICON._24.OBJ_ERDE, ICON._32.OBJ_ERDE);
	}

	// INTERN

	private void iSuche(String suche) {
		S_Tabelle<String> tab=DBManager.i().schnipsel().gTabLinkDialog(suche);
		t.k_tab.sInhalt(tab);
	}

	private void iAuswahl(boolean ende) {
		S_Tabelle<Object> auswahl=t.k_tab.gAuswahl();
		if(auswahl==null || auswahl.gLaenge()!=1) {
			SWT_Dialog.hinweis("Es wurde kein Artikel ausgewählt!");
			return;
		}
		int id=Integer.parseInt(""+auswahl.gib(2, 1));
		t.erg_titel=t.k_titel.gText();
		t.erg_id=id;
		t.erg_idname=""+auswahl.gib(1, 1);
		t.k_titel.sText(t.erg_idname);

		if(ende)
			t.schliessen();
	}
}
